package com.qq.多线程.线程同步.案例.送礼物;

import java.util.ArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

//高度面向对象用this做锁，不高度面向对象谁唯一用谁做锁
public class MyThread extends Thread{
	//继承Thread类创建线程对象
	//静态成员变量是每个线程对象的共享资源，实例成员变量是每个线程对象自己的资源
    private static int a ;//也可以直接在这给赋值，比静态代码块先执行
    private int count;//此时每个线程对象都有一个属于自己的count变量
    private static ArrayList<String> gift = new ArrayList<>();
    static {//静态代码块，可以初始化静态成员，并且在内部可以使用方法。
        a = 1000;
        for(int i = 0 ; i < a ; i++){
            gift.add("小玩偶" + (i+1) + "号");
        }
    }
    public MyThread(String name){
        super(name);
    }

    @Override
    public void run() {
        String name = Thread.currentThread().getName();
        //可以在抢锁之前获取名字，因为线程都运行各自的run方法
        while (true){
        //此时不能用this作为锁，因为是线程对象调用run方法，this代表线程对象，而现在有两个线程
            synchronized (gift){//使用作为共享资源的gift集合当锁
                if (gift.size() < 10){
                    break;
                }
                System.out.println(name + "送出了" + gift.remove(gift.size() - 1));
                ++count;

            }

        }
    }
    public int getCount(){
        return count;
    }

}
